package com.hh.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hh.entity.domain.Comments;
import com.hh.entity.dto.comment.CommentsAddRequest;
import com.hh.entity.dto.comment.CommentsQueryRequest;
import com.hh.entity.vo.CommentTreeVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author hanhui
 * @description 针对表【comments】的数据库操作Service
 * @createDate 2025-07-20 12:03:00
 */
public interface CommentsService extends IService<Comments> {

    /**
     * 添加评论
     * @param commentsAddRequest 评论添加请求对象，包含评论内容等信息
     * @param request HTTP请求对象，用于获取用户信息等
     * @return 是否添加成功
     */
    boolean addComments(CommentsAddRequest commentsAddRequest, HttpServletRequest request);

    /**
     * 根据查询条件构建查询包装器
     * @param commentsQueryRequest 评论查询请求对象，包含查询条件
     * @return 构建好的QueryWrapper对象
     */
    QueryWrapper<Comments> getQueryWrapper(CommentsQueryRequest commentsQueryRequest);

    /**
     * 将评论列表转换为树形结构的评论视图对象列表
     * @param commentsPage 评论列表
     * @return 树形结构的评论视图对象列表
     */
    List<CommentTreeVO> getCommentsVOTree(List<Comments> commentsPage);

    /**
     * 删除评论（只能删除自己的评论）
     * @param id 评论ID
     * @param request HTTP请求对象，用于验证用户身份
     * @return 是否删除成功
     */
    boolean deleteComments(Long id, HttpServletRequest request);

    /**
     * 修改评论（只能修改自己的评论）
     * @param comments 评论对象，包含修改后的评论内容
     * @param request HTTP请求对象，用于验证用户身份
     * @return 是否修改成功
     */
    boolean updateComments(Comments comments, HttpServletRequest request);

    /**
     * 获取评论详情
     * @param id 评论ID
     * @return 评论详情对象
     */
    Comments getComments(Long id);

    /**
     * 获取评论总数
     * @return 评论总数
     */
    int getCommentsCount();

    /**
     * 根据查询条件获取评论数量
     * @param commentsQueryRequest 评论查询请求对象，包含查询条件
     * @return 符合条件的评论数量
     */
    int getCommentsCount(CommentsQueryRequest commentsQueryRequest);

    /**
     * 过滤敏感词
     * @param content 原始内容
     * @return 过滤后的内容
     */
    String filterSensitiveWords(String content);

    /**
     * 防止SQL注入
     * @param content 原始内容
     * @return 过滤后的安全内容
     */
    String filterInjection(String content);
}
